#include "drv_motor.h"

#define MOTOR_PORT          GPIOB
#define MOTOR_INA_PIN       LL_GPIO_PIN_4
#define MOTOR_INB_PIN       LL_GPIO_PIN_3

#define MOTOR_INA_SET()     LL_GPIO_SetOutputPin(MOTOR_PORT, MOTOR_INA_PIN)
#define MOTOR_INA_RESET()   LL_GPIO_ResetOutputPin(MOTOR_PORT, MOTOR_INA_PIN)
#define MOTOR_INB_SET()     LL_GPIO_SetOutputPin(MOTOR_PORT, MOTOR_INB_PIN)
#define MOTOR_INB_RESET()   LL_GPIO_ResetOutputPin(MOTOR_PORT, MOTOR_INB_PIN)

volatile unsigned char motor_stop = 0x01;
void drv_motor_init(void)
{
    LL_GPIO_InitTypeDef GPIO_InitStruct = {0x00};
    LL_IOP_GRP1_EnableClock(LL_IOP_GRP1_PERIPH_GPIOA);
    GPIO_InitStruct.Pin         = MOTOR_INA_PIN;
    GPIO_InitStruct.Mode        = LL_GPIO_MODE_OUTPUT;
    GPIO_InitStruct.Speed       = LL_GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.OutputType  = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.Pull        = LL_GPIO_PULL_NO;
    LL_GPIO_Init(MOTOR_PORT, &GPIO_InitStruct);
    MOTOR_INA_SET();

    GPIO_InitStruct.Pin         = MOTOR_INB_PIN;
    GPIO_InitStruct.Mode        = LL_GPIO_MODE_OUTPUT;
    GPIO_InitStruct.Speed       = LL_GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.OutputType  = LL_GPIO_OUTPUT_PUSHPULL;
    GPIO_InitStruct.Pull        = LL_GPIO_PULL_NO;
    LL_GPIO_Init(MOTOR_PORT, &GPIO_InitStruct);
    MOTOR_INB_SET();
}

void drv_motor_stop(void)
{
    MOTOR_INA_SET();
    MOTOR_INB_SET();
    motor_stop = 0x01;
}

void drv_motor_reverse(void)
//void drv_motor_forward(void)
{
    MOTOR_INA_SET();
    MOTOR_INB_RESET();
    motor_stop = 0x00;
}

void drv_motor_forward(void)
//void drv_motor_reverse(void)
{
    MOTOR_INA_RESET();
    MOTOR_INB_SET();
    motor_stop = 0x00;
}

void drv_motor_standby(void)
{
    MOTOR_INA_RESET();
    MOTOR_INB_RESET();
    motor_stop = 0x01;
}

unsigned char drv_motor_is_stop(void)
{
    return motor_stop;
}
